scalebutton: Handle smooth scroll events
authorCarlos Garnacho <carlosg@gnome.org>
Fri, 22 Aug 2014 17:15:57 +0000 (19:15 +0200)
committerCarlos Garnacho <carlosg@gnome.org>
Tue, 26 Aug 2014 12:54:08 +0000 (14:54 +0200)
This has the double effect to make scale button truly smooth, and make
scrolling work on wayland, since all scrolling is "smooth" there.

https://bugzilla.gnome.org/show_bug.cgi?id=720269

gtk/gtkscalebutton.c

index c979f613f18ead2e49abb1d539fec36fdf0c5583..24976b0accf93ae6b34f63bec2d1138970e52062 100644 (file)
@@ -357,7 +357,7 @@ gtk_scale_button_init (GtkScaleButton *button)
   /* Need a local reference to the adjustment */
   g_object_ref (priv->adjustment);
 
-  gtk_widget_add_events (GTK_WIDGET (button), GDK_SCROLL_MASK);
+  gtk_widget_add_events (GTK_WIDGET (button), GDK_SMOOTH_SCROLL_MASK);
 }
 
 static void
@@ -786,12 +786,18 @@ gtk_scale_button_scroll (GtkWidget      *widget,
       if (d > gtk_adjustment_get_upper (adjustment))
        d = gtk_adjustment_get_upper (adjustment);
     }
-  else
+  else if (event->direction == GDK_SCROLL_DOWN)
     {
       d -= gtk_adjustment_get_step_increment (adjustment);
       if (d < gtk_adjustment_get_lower (adjustment))
        d = gtk_adjustment_get_lower (adjustment);
     }
+  else if (event->direction == GDK_SCROLL_SMOOTH)
+    {
+      d += event->delta_y * gtk_adjustment_get_step_increment (adjustment);
+      d = CLAMP (d, gtk_adjustment_get_lower (adjustment),
+                 gtk_adjustment_get_upper (adjustment));
+    }
   gtk_scale_button_set_value (button, d);
 
   return TRUE;